# Обновленный план курса по начальному игрострою

## Условия отбора
  - Вы самостоятельно справляетесь с тестовым заданием:
  - 1. На компьютере с Linux (Устанавлиаете Fedora например, в свободное место на диске рядом с Windows)
  - 2. Собираете *из исходников* библиотеку SFML как расписано на официальном сайте (Гуглите SFML и находите там документацию с примерами подробную: www.sfml-dev.org)
  - 3. Собираете примеры использования этой библиотеки и убеждаетесь что у вас они работают. (Читаете на английском документацию, и по шагам собираете из исходников под вашу Linux машину эту библиотеку и ее примеры использования)
  - 4. Если все пункты выше вы смогли выполнить (примеры запускаются и работают), вы выполнили тестовое задание. (Важно: мы *НЕ* будем использовать эту библиотеку в обучении)

## Для кого этот курс
  - Курс задумывался для гениальных школьников и студентов, как подготовка к профессиональной деятельности
  - Так же курс планировался для предложения лучшим студентам работы после успешного освоения курса


## Необходимая подготовка
  - Вы знаете С++ на 3 балла по 5-ти бальной шкале. Либо Вы знаете C# или Java на уровне профессионала и сможете в короткий срок поднять уровень по С++.
  - Вы знаете математику за 9-ый класс, и прямо сейчас можете решить любые от туда задачки, вектором, процентами или синусом вас не напугать.
  - Вы знаете английский на уровне способным читать документацию и понимать что там написано.

## Необходимое оборудование
  - Вам понадобится ноутбук с GNU/Linux (Вы же хотите стать хакером а не домохозяйкой!)
  - Вам понадобится Windows машина (она может быть установлена парралельно с Linux)
  - Если хотите портировать и на MacOS то и машина с ней тоже понадобится (портирование на MacOS покажу на своей машине)
  - Для портирования на Android понадобится любой телефон с Android OS (хотя достаточно эмулятора, если у вас минимум 8Гб памяти)
  
## Сколько времени понадобится на выполнение всех заданий:
  - Каждая новая теоритическая информация подкрепляется программой, которую нужно будет написать
  - За время курса вы напишите около 25 тестовых программ и свою мини игру
  - Так же вам понадобится изучать дополнительно документацию OpenGL ES 2.0, SDL2 и т.д.
  - В неделю два занятия по субботам и воскресеньям по 4 часа каждое где будет и теория и практика
  - Дополнительно в течении недели студент выполняет практические задания (домашняя работа)
  - Самому слабому студенту обычно нужно до 16 часов в неделю заниматься самостоятельно
  - Все задания уже выполнены, и в любой момент студент может свериться или просто взять готовое решение

## Для чего этот курс
  - Научить наших студентов, реальной современной работе программиста игр
  - Дать полное и всесторонее понимание того как работает игра, как она устроена внутри
  - Дать практические навыки работы, которых не дают в Университете, непосредственно от профессионала занимающегося реализацией игровых движков для многоплатформеных проектов.

## Вы будете уметь
  - пользоватся компилятором, линкером, отладчиком, терминалом, как настоящий хакер
  - архитекртурно мыслить, слоями, абстракциями в рамках ООП и не только
  - создовать и редактировать кучу разных форматов, изображений, звуков, моделей
  - применять полученые знания на любой современной ОС: Windows, Linux, MaxOS, Android, iOS

## Программа курса

  - * Становимся профессиональным программистом
  - 0-0. устанавливаем систему(GNU/Linux), компилятор, системы сборки и управления кодом
  - 0-1. пишем Привет Мир, и разбераем его подробно. Исправляем ошибки.
  - 0-2. учимся создовать и использовать библиотеки статические и динамические.
  - 2-1. знакомимся с библиотекой SDL2 + динамическое связывание
  - 2-2. SDL2 + статическое связывание
  - 3-1. главный цикл программы, GUI программирование, очередь событий
  - 3-2. движок игры, разделение, на код игры и код движка для повторного использования
  - 3-3. выносим движок в разделяемую библиотеку
  - * Изучаем программирование графики (2D через 3D)
  - 4-0. основы вывода примитивов: вывод линий, треугольников, заполнение
  - 4-1. знакомимся с OpenGL: создание контекста, загрузка функций, очистка буфера
  - 4-2. выводим свой первый треугольник через OpenGL ES 2.0 знакомство с шейдерами
  - 5-1. vertex morphing
  - 5-2. загрузка текстур, текстурирование, форматы текстур, поддержка аппаратурой
  - 5-3. переносим работу с графикой в наш мини движок, задумываемся об архитектуре
  - 6-1. матрицы (масштабирования, переноса, поворота) и веторы, выводим и программируем
  - 6-2. используем матрицы и векторы в шейдерах
  - 6-3. проверяем знания, двигаем, вращаем, масштабируем текстурированый объект (танк)
  - * Изучаем программирование звука
  - 7-1. принципы вывода звука. минимальный пример
  - 7-2. добавляем звук в движок, звуковые форматы, эффекты (эхо, Доплера)  
  - * Изучаем вывод текста, кнопки, ползунки и прочие элементы управление
  - 8-1. добавляем ImGui и разбираемся как реализованы: вывод текста, кнопки, управление мышью
  - 8-2. обновляем интерфейс мини-движка, теперь игра это загружаемая библиотека
  - 8-3. чистим код движка (готовимся сделать на нем мини игру)
  - * Делаем свой маленький проект
  - 9-1. Продумываем игру которую будем делать. Натуральное макетирование.
  - 9-2. Программируем игру на нашем мини-движке. (на игру 8 часов, змейка, тетрис, пинбол)
  - * Портируем игрy на Windows 10
  - 10-1. Портируем игру. Два подхода: 1. msys2+gcc 2. Visual Studio+vcpkg
  - * Портируем игру на MacOS
  - 11-1. Портируем на MacOS. clang+xcode
  - * Портируем на Android
  - 12-1. Порт на Android. Android-Studio + gradle


## Преподаватель курса

Чайка Леонид Николаевич - сейчас lead core developer в Wargaming.net в проекте World Of Tanks Blitz.
До этого писал движки и игры в AWEM, CyberCradle, начинал карьеру программиста в Epam.
